package com.team.ai.controller;

import com.team.ai.entity.ResultEntity;
import com.team.ai.service.util.PushMessageService;
import com.team.ai.service.util.RedisKeyService;
import com.team.ai.tool.JieBaTool;
import com.team.ai.tool.KoDoTool;
import com.team.ai.tool.OCRTool;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@CrossOrigin
@RestController
@RequestMapping("v3/tool/")
public class ToolController {


    @Resource
    KoDoTool koDoTool;
    @Resource
    PushMessageService pushMessageService;//消息推送服务
    @Resource
    RedisKeyService redisKeyService;
    @Resource
    OCRTool ocrTool;
    @Resource
    JieBaTool jieBaTool;
    @Value("${project.localfilepath}")
    private String localFilePath;//本地文件存储地址

    private static final Logger logger= LoggerFactory.getLogger(ToolController.class);//日志getLogger需要传入的类名

    @Resource
    private RedisTemplate<String ,String> redisTemplate;//Redis工具类

    // 传文件
    @PostMapping("/upload")
    public String multiImport(@RequestParam("uploadFile") MultipartFile[] uploadFile) throws IOException {
        System.out.println(uploadFile.length);
        for (MultipartFile multipartFile:uploadFile) {
            // 文件名
            multipartFile.getOriginalFilename();
            // 获取文件
            multipartFile.getInputStream();
            String name=multipartFile.getOriginalFilename();
            String suffix=name.substring(name.lastIndexOf("."));
            File file=File.createTempFile("C:\\javaweb2\\filetemp",suffix);
            multipartFile.transferTo(file);
            System.out.println(file);
        }
        return ResultEntity.success("成功");
    }


    /**
     * 通用型文件上传七牛云
     * @param file 前端上传的文件
     * @return Json
     */
    @PostMapping("upFile")
    private String upFile(
            @RequestParam("file") MultipartFile file
    ){
        String SuffixName =file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//获取文件后缀名
        String FileNewName= UUID.randomUUID()+SuffixName;//新的文件名
        File dest=new File(localFilePath+FileNewName);//生成新的文件
        if(!dest.getParentFile().exists()){//判定文件夹是否存在
            dest.getParentFile().mkdir();//生成文件夹
        }
        try{
            file.transferTo(dest);//将临时文件转为正式文件
            String koDoString = koDoTool.UploadFile(localFilePath+FileNewName);//上传到七牛云
            return ResultEntity.success(koDoString);//返回七牛云的文件路径字符串
        }catch (Exception e){
            logger.error(e.getMessage());//输出日志
            return ResultEntity.fail(-10001);//返回错误代码
        }
    }

    @GetMapping("OCR")
    private String OCR(){
        //return ResultEntity.success(ocrTool.OCRBase("C:\\sfz.jpg",2));
        //return ResultEntity.success(ocrTool.OCRBase("C:\\cp.jpeg",3));
        //return ResultEntity.success(ocrTool.OCRBase("C:\\ty.jpg",1));
        return ResultEntity.success(ocrTool.OCRBase("C:\\sfz.jpg",2));

    }
    @GetMapping("animalIn")
    private String animalIn(){
            return ResultEntity.success(ocrTool.Animal("C:\\dw.png"));

    }


    @PostMapping("Animal")
    private String Animal(
            @RequestParam("file") MultipartFile file
    ){
        String SuffixName =file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//获取文件后缀名
        String FileNewName= UUID.randomUUID()+SuffixName;//新的文件名
        File dest=new File(localFilePath+FileNewName);//生成新的文件
        if(!dest.getParentFile().exists()){//判定文件夹是否存在
            dest.getParentFile().mkdir();//生成文件夹
        }
        try{
            file.transferTo(dest);//将临时文件转为正式文件
            String re = ocrTool.Animal(dest.getPath());//上传文件路径
            dest.delete();
            return ResultEntity.success(re);//返回七牛云的文件路径字符串
        }catch (Exception e){
            logger.error(e.getMessage());//输出日志
            return ResultEntity.fail(-10001);//返回错误代码
        }
    }

    /**
     * 分词
     * @param par 文本内容
     * @return json
     */
    @GetMapping("JieBa")
    private String JieBa(@RequestParam("par")String par){
        return ResultEntity.success(jieBaTool.BaseJieBa(par));
    }



}
